package com.zhdl.network.service.dto;

import lombok.Data;

@Data
public class FireParameter {
    // region 通用信息（0x01~0x0F）

    /**
     * 0x01 产品类型 产品大类例：ZHLW HFD
     */
    private String productType;

    /**
     * 0x02 产品型号字符串 产品具体型号例 ZHLW12-5
     */
    private String productModelText;

    /**
     * 0x03 设备编号 U32 例：49 00 00 00 参数值，显示值为 73
     */
    private long deviceNumber;

    /**
     * 0x04 软件版本 String 例：V1.00 20221108
     */
    private String softVer;

    /**
     * 0x05 硬件版本 String 例：2205ZK1V10 20221018
     */
    private String hardwareVer;

    /**
     * 0x06 协议版本 String 例：V1.00 20221108 （按专用部分版本号）
     */
    private String protocolVer;

    // endregion 通用信息（0x01~0x0F）

    // region 探测器信息表（0x10~0x9F）

    /**
     * 0x11 探测器时间 U8[6] 依次为年(值-2000)-月-日-时-分-秒
     */
    private String time;

    /**
     * 0x12 探测器控制 U8 bit 为 0：不执行 1：执行 bit0-解除报警 bit1-重启设备
     */
    private byte ctrl;

    /**
     * 0x13 输出继电器控制 CH1
     * 0：无效 （上位机软件不控制继电器，设备自己控制）
     * 1：不动作（上位机软件强制控制继电器 不动作）
     * 2：动作（上位机软件强制控制继电器 动作）
     */
    private byte outputRelayCtrl1;

    /**
     * 0x14 输出继电器控制 CH2
     * 0：无效 （上位机软件不控制继电器，设备自己控制）
     * 1：不动作（上位机软件强制控制继电器 不动作）
     * 2：动作（上位机软件强制控制继电器 动作）
     */
    private byte outputRelayCtrl2;

    /**
     * 0x15 输出继电器控制 CH3
     * 0：无效 （上位机软件不控制继电器，设备自己控制）
     * 1：不动作（上位机软件强制控制继电器 不动作）
     * 2：动作（上位机软件强制控制继电器 动作）
     */
    private byte outputRelayCtrl3;

    /**
     * 0x16 输出继电器控制 CH4
     * 0：无效 （上位机软件不控制继电器，设备自己控制）
     * 1：不动作（上位机软件强制控制继电器 不动作）
     * 2：动作（上位机软件强制控制继电器 动作）
     */
    private byte outputRelayCtrl4;

    /**
     * 0x17 U32 探测器心跳 间隔 1s 累加，可以理解为是连续运行时间，单位秒
     */
    private long heartNum;

    /**
     * 0x18 U8 探测器整机状态
     */
    private byte detectorStatus;

    /**
     * 0x19 U16 检测单元状态 bit0-主电源供电状态 bit1-检测试剂状态（异常描述为“液位低”）
     */
    private byte[] checkUnitStatus;

    /**
     * 0x19 U16 检测单元状态 bit0-主电源供电状态 bit1-检测试剂状态（异常描述为“液位低”）
     * 存储原始数字，方便统计设备故障数量，非0的都算设备故障
     */
    private Integer checkUnitStatusValue;

    /**
     * 0x1A U8 各检测模块整体状态 0：正常 1：异常 bit0-微粒子检测模块 bit1-烟雾检测模块状态标识
     * 0 两个都正常
     * 1 微粒子检测模块异常
     * 2 烟雾检测模块异常
     * 3 两个都异常
     */
    private byte detectorModuleStatus;

    /**
     * 0x1A U8 各检测模块整体状态 bit0-微粒子检测模块状态标识
     */
    private byte particleModuleStatus;

    /**
     * 0x1A U8 各检测模块整体状态 bit1-烟雾检测模块状态标识
     */
    private byte smokeModuleStatus;

    /**
     * 0x1B 静音报警声音 true为静音；false为取消静音
     */
    private boolean muteAlarmSound;

    /**
     * 0x21 U16 供电电压 单位 V，传输按实际值的 100 倍(例如电压 9.51V，传输数值为 951，在屏幕上应显示为 9.51，下同
     */
    private float serviceVoltage;

    /**
     * 0xEA U8 各流速传感器使能标志 对应 bit 为 0：无效（禁用）1：有效（启用） bit0-bit3 依次流速传感器 1-4
     * (不同型号产品，流速传感器启用数量不同)
     */
    private boolean[] flowSensorEnable;

    /**
     * 0x22 U8 采样管 1 流速
     */
    private short samplingFlow1;

    /**
     * 0x23 U8 采样管 2 流速
     */
    private short samplingFlow2;

    /**
     * 0x24 U8 采样管 3 流速
     */
    private short samplingFlow3;

    /**
     * 0x25 U8 采样管 4 流速
     */
    private short samplingFlow4;

    /**
     * 0x26 S16 环境温度 -40~125 单位℃，实际值的 100 倍
     */
    private float envTemperature;

    /**
     * 0x27 U16 环境湿度 0~100 单位%RH ，实际值的 100 倍
     */
    private float envHumidity;

    /**
     * 0x28 U16 真空压力 0~50 单位 kPa，实际值的 100 倍
     */
    private float vacuumPressure;

    /**
     * 0x29 U16 PD探测电压 0~5 单位 V，实际值的 100 倍
     */
    private float detectPressure;

    /**
     * 0x2A U8 开关量输入状态
     */
    private byte[] diStatus;

    /**
     * 0x2B U8 开关量输出状态
     */
    private byte[] doStatus;


    // endregion 探测器信息表（0x10~0x9F）

    // region 防区运行数据 0x40-0x74

    /**
     * 0x40 U8 1防区 报警状态 0 正常；1 预警；2 三级报警；3 二级报警；4 一级报警；5 报警保持；
     */
    private byte alarmStatus1;

    /**
     * 0x41 U32 1防区微粒子数量
     */
    private long particleCount1;

    /**
     * 0x42 float 1防区 微粒子浓度百分比
     */
    private float particlePercent1;

    /**
     * 0x43 U32 1防区 烟雾检测数据
     */
    private long smokeCount1;

    /**
     * 0x44 float 1防区 烟雾浓度百分比
     */
    private float smokePercent1;

    /**
     * 0x50 U8 2防区 报警状态
     */
    private short alarmStatus2;

    /**
     * 0x51 U32 2防区微粒子数量
     */
    private long particleCount2;

    /**
     * 0x52 float 2防区 微粒子浓度百分比
     */
    private float particlePercent2;

    /**
     * 0x53 U32 2防区 烟雾检测数据
     */
    private long smokeCount2;

    /**
     * 0x54 float 2防区 烟雾浓度百分比
     */
    private float smokePercent2;

    /**
     * 0x60 U8 2防区 报警状态
     */
    private short alarmStatus3;

    /**
     * 0x61 U32 2防区微粒子数量
     */
    private long particleCount3;

    /**
     * 0x62 float 2防区 微粒子浓度百分比
     */
    private float particlePercent3;

    /**
     * 0x63 U32 2防区 烟雾检测数据
     */
    private long smokeCount3;

    /**
     * 0x64 float 2防区 烟雾浓度百分比
     */
    private float smokePercent3;

    /**
     * 0x70 U8 2防区 报警状态
     */
    private short alarmStatus4;

    /**
     * 0x71 U32 2防区微粒子数量
     */
    private long particleCount4;

    /**
     * 0x72 float 2防区 微粒子浓度百分比
     */
    private float particlePercent4;

    /**
     * 0x73 U32 2防区 烟雾检测数据
     */
    private long smokeCount4;

    /**
     * 0x74 float 2防区 烟雾浓度百分比
     */
    private float smokePercent4;

    // endregion 防区运行数据

    // region 设备配置信息（掉电保持）

    /**
     * 0xA0 灵敏度 U8 0-15 级可调
     */
    private byte sensitivity;

    /**
     * 0xA1 火灾预警-阈值 0-99 99 代表 99%
     */
    private byte fareAlarmThresholdValue;

    /**
     * 0xA2 火灾Ⅲ级报警-阈值 0-99 99 代表 99%
     */
    private byte fareAlarmThresholdValue3;

    /**
     * 0xA3 火灾Ⅱ级报警-阈值 0-99 99 代表 99%
     */
    private byte fareAlarmThresholdValue2;

    /**
     * 0xA4 火灾Ⅰ级报警-阈值 0-99 99 代表 99%
     */
    private byte fareAlarmThresholdValue1;

    /**
     * 0xA5 采样管 1 报警高阈值 U8  0-99 99 代表 99%
     */
    private byte sampling1HighLimit;

    /**
     * 0xA6 采样管 2 报警高阈值 U8  0-99 99 代表 99%
     */
    private byte sampling2HighLimit;

    /**
     * 0xA7 采样管 3 报警高阈值 U8  0-99 99 代表 99%
     */
    private byte sampling3HighLimit;

    /**
     * 0xA8 采样管 4 报警高阈值 U8  0-99 99 代表 99%
     */
    private byte sampling4HighLimit;

    /**
     * 0xA9 鼓风机转速 U8 99 代表 99%满转速
     */
    private byte fanSpeed;

    /**
     * 0xAC 输入 1 设定 U8 0：Unused 1：Battery Fault 2：Reset 3：External Fault
     */
    private byte input1;

    /**
     * 0xAD 输入 1 设定 U8 0：Unused 1：Battery Fault 2：Reset 3：External Fault
     */
    private byte input2;

    /**
     * 0xAE 输入 1 设定 U8 0：Unused 1：Battery Fault 2：Reset 3：External Fault
     */
    private byte input3;

    /**
     * 0xAF 输入 1 设定 U8 0：Unused 1：Battery Fault 2：Reset 3：External Fault
     */
    private byte input4;

    /**
     * 0xB0 4 路输入状态设定 0：常闭 1：常开（1 代表常态为断开（低电平））
     */
    private byte input1Status;

    /**
     * 0xB0 4 路输入状态设定 0：常闭 1：常开（1 代表常态为断开（低电平））
     */
    private byte input2Status;

    /**
     * 0xB0 4 路输入状态设定 0：常闭 1：常开（1 代表常态为断开（低电平））
     */
    private byte input3Status;

    /**
     * 0xB0 4 路输入状态设定 0：常闭 1：常开（1 代表常态为断开（低电平））
     * true表示常开 1
     */
    private byte input4Status;

    /**
     * 0xB1 输出 1 设定 0：Unused 1：Pre-Alarm 2：F 1 Alarm 3：F 2 Alarm 4：F 3 Alarm
     */
    private byte output1;

    /**
     * 0xB2 输出 2 设定 0：Unused 1：Pre-Alarm 2：F 1 Alarm 3：F 2 Alarm 4：F 3 Alarm
     */
    private byte output2;

    /**
     * 0xB3 输出 3 设定 0：Unused 1：Pre-Alarm 2：F 1 Alarm 3：F 2 Alarm 4：F 3 Alarm
     */
    private byte output3;

    /**
     * 0xB4 输出 4 设定 0：Unused 1：Pre-Alarm 2：F 1 Alarm 3：F 2 Alarm 4：F 3 Alarm
     */
    private byte output4;

    /**
     * 0xB5 输出 1 延时 单位秒
     */
    private byte output1Delay;

    /**
     * 0xB6 输出 2 延时 单位秒
     */
    private byte output2Delay;

    /**
     * 0xB7 输出 3 延时 单位秒
     */
    private byte output3Delay;

    /**
     * 0xB8 输出 4 延时 单位秒
     */
    private byte output4Delay;

    /**
     * 0xB9 4 路输出状态设定 U8 bit 为 0：常闭 1：常开（1 代表常态为吸合）
     *
     * @mock 1
     */
    private byte output1Status;

    /**
     * 0xB9 4 路输出状态设定 U8 bit 为 0：常闭 1：常开（1 代表常态为吸合）
     *
     * @mock 1
     */
    private byte output2Status;

    /**
     * 0xB9 4 路输出状态设定 U8 bit 为 0：常闭 1：常开（1 代表常态为吸合）
     *
     * @mock 1
     */
    private byte output3Status;

    /**
     * 0xB9 4 路输出状态设定 U8 bit 为 0：常闭 1：常开（1 代表常态为吸合）
     *
     * @mock 1
     */
    private byte output4Status;

    /**
     * 0xBA 语音报警音量 U8 0~30 30 级音量调节
     */
    private byte alarmVolume;

    /**
     * 0xBB 背景浓度设定 0~40 浓度比例，40 代表 40%
     */
    private byte bgConcentration;

    /**
     * 0xBC 采样管 1 报警低阈值  0-99 99 代表 99%
     */
    private byte sampling1LowLimit;

    /**
     * 0xBD 采样管 2 报警低阈值  0-99 99 代表 99%
     */
    private byte sampling2LowLimit;

    /**
     * 0xBE 采样管 3 报警低阈值  0-99 99 代表 99%
     */
    private byte sampling3LowLimit;

    /**
     * 0xBF 采样管 4 报警低阈值  0-99 99 代表 99%
     */
    private byte sampling4LowLimit;

    /**
     * 0xC0 通讯模式 U8 1：RS485 2：LAN 3：LoRa
     */
    private byte commModel;

    /**
     * 0xC1 设备地址 U8
     */
    private byte deviceAddr;

    /**
     * 0xC2 波特率 U16
     */
    private Integer BaudRate;

    // endregion 设备配置信息（掉电保持）

    // region 设备厂家配置信息（掉电保持）

    /**
     * 0xE0 设备防区数量 1~4 本设备下属防区数量
     */
    private byte areaCount;

    /**
     * 0xE1 流速校准系数 1 U8 实际数值的 10 倍（屏幕应按 1 位小数点输入）（例如：屏幕上输入 2.1，实际传输 21，下同）
     */
    private byte flowRateCheckFactor1;

    /**
     * 0xE2 流速校准系数 2 U8 实际数值的 10 倍（屏幕应按 1 位小数点输入）（例如：屏幕上输入 2.1，实际传输 21，下同）
     */
    private byte flowRateCheckFactor2;

    /**
     * 0xE3 流速校准系数 3 U8 实际数值的 10 倍（屏幕应按 1 位小数点输入）（例如：屏幕上输入 2.1，实际传输 21，下同）
     */
    private byte flowRateCheckFactor3;

    /**
     * 0xE4 流速校准系数 4 U8 实际数值的 10 倍（屏幕应按 1 位小数点输入）（例如：屏幕上输入 2.1，实际传输 21，下同）
     */
    private byte flowRateCheckFactor4;

    /**
     * 0xE5 PD 探测电压设定值 Float 1.0~2.0
     */
    private float pdDetectVoltageValue;

    /**
     * 0xE6 水位阈值 U16
     */
    private int waterLevelLimit;

    /**
     * 0xE7 烟雾阈值 U16
     */
    private int smokeLimit;

    /**
     * 0xE8 信号基值 U16 8000~15000
     */
    private int signBaseValue;

    /**
     * 0xE9 产品型号
     */
    private byte productModel;

    /**
     * 0xEA 各流速传感器使能标志 bit0-bit3 依次流速传感器 1-4
     */
    private boolean flowSpeedSensorEnable1;

    /**
     * 0xEA 各流速传感器使能标志 bit0-bit3 依次流速传感器 1-4
     */
    private boolean flowSpeedSensorEnable2;

    /**
     * 0xEA 各流速传感器使能标志 bit0-bit3 依次流速传感器 1-4
     */
    private boolean flowSpeedSensorEnable3;

    /**
     * 0xEA 各流速传感器使能标志 bit0-bit3 依次流速传感器 1-4
     */
    private boolean flowSpeedSensorEnable4;

    /**
     * 0xEB U8 各检测模块使能标志 bit0-微粒子检测模块使能标识
     */
    private boolean particleModuleEnable;

    /**
     * 0xEB U8 各检测模块使能标志 bit1-烟雾检测模块使能标识
     */
    private boolean smokeModuleEnable;

    // endregion 设备厂家配置信息（掉电保持）
}
